/*
key:用一个vector装，比对它的大小和相应树高的完全二叉树的size，若不对就要从底层的上一层开始剪树枝。
 */

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     * 你需要返回一个指针，指向root，表示删减去若干个点后，剩下的树
     * @param root TreeNode类 指向二叉树的根
     * @return TreeNode类
     */
    TreeNode* solve(TreeNode* root) 
    {
        if(root==nullptr)
        {
            return root;
        }
        queue<TreeNode*>Q;
        vector<TreeNode*>V;
        Q.push(root);
        while(!Q.empty())
        {
            if(Q.front()->val=='#')
            {
                break;
            }
            V.push_back(Q.front());
            if(Q.front()->left!=nullptr)
            {
                Q.push(Q.front()->left);
            }
            if(Q.front()->right!=nullptr)
            {
                Q.push(Q.front()->right);
            }
            Q.pop();
        }
        //保留的个数
        int baoliu=ceil(log2(V.size()+1));
        //V.erase(V.begin()+pow(2,baoliu)-1,V.end());
        int i;
        if(pow(2,baoliu)-1!=V.size())
        {
            for(i=pow(2,baoliu-2)-1;i<pow(2,baoliu-2)-1+pow(2,baoliu-2);i++)
            {
                V[i]->left=nullptr;
                V[i]->right=nullptr;
            }
        }
        
        return root;
    }
};